#ifndef I2C_DEVICE_H
#define I2C_DEVICE_H

#include <driver/i2c_master.h>

/**
 * @brief I2C设备基类
 * 
 * 提供I2C设备的基本读写操作功能
 */
class I2cDevice {
public:
    /**
     * @brief 构造函数
     * 
     * @param i2c_bus I2C总线句柄
     * @param addr 设备I2C地址
     */
    I2cDevice(i2c_master_bus_handle_t i2c_bus, uint8_t addr);

protected:
    /**
     * @brief I2C设备句柄
     */
    i2c_master_dev_handle_t i2c_device_;

    /**
     * @brief 写入寄存器
     * 
     * @param reg 寄存器地址
     * @param value 要写入的值
     */
    void WriteReg(uint8_t reg, uint8_t value);
    
    /**
     * @brief 读取寄存器
     * 
     * @param reg 寄存器地址
     * @return 读取到的值
     */
    uint8_t ReadReg(uint8_t reg);
    
    /**
     * @brief 读取多个寄存器
     * 
     * @param reg 起始寄存器地址
     * @param buffer 数据缓冲区
     * @param length 要读取的字节数
     */
    void ReadRegs(uint8_t reg, uint8_t* buffer, size_t length);
};

#endif // I2C_DEVICE_H
